Skip to content
Loafacto 문서/참고 문서/web-ui 문서/21. supabase-ai-request-logs.sql

21. supabase-ai-request-logs.sql

원본 파일: 'C:\Repository\loafacto-hub\docs\web-ui\21. supabase-ai-request-logs.sql'

sql
-- ============================================================
-- AI 요청 로그 테이블 (ai_request_logs)
-- AdminAI > Usage & Performance 통계 집계용
-- ============================================================

-- 1. 테이블 생성
-- ============================================================
CREATE TABLE IF NOT EXISTS public.ai_request_logs (
    id             uuid          DEFAULT gen_random_uuid() PRIMARY KEY,
    feature_id     text,                               -- 기능 ID (챗봇 라우트 :id)
    model          text          NOT NULL,             -- LLM 모델명 (e.g. gpt-4o-mini)
    provider       text          NOT NULL,             -- 공급자 (openai / ollama)
    input_tokens   integer,                            -- 프롬프트 토큰 수
    output_tokens  integer,                            -- 완성 토큰 수
    total_tokens   integer,                            -- 합계 토큰 수
    duration_ms    integer,                            -- 전체 처리 시간 (ms)
    ttft_ms        integer,                            -- Time To First Token (ms)
    rag_used       boolean       DEFAULT false,        -- RAG 사용 여부
    status         text          NOT NULL DEFAULT 'success', -- 'success' | 'error'
    error_message  text,                               -- 에러 발생 시 메시지
    created_at     timestamptz   DEFAULT now() NOT NULL
);

-- 2. 인덱스
-- ============================================================
CREATE INDEX IF NOT EXISTS ai_request_logs_created_at_idx
    ON public.ai_request_logs (created_at DESC);

CREATE INDEX IF NOT EXISTS ai_request_logs_feature_id_idx
    ON public.ai_request_logs (feature_id);

CREATE INDEX IF NOT EXISTS ai_request_logs_status_idx
    ON public.ai_request_logs (status);

-- 3. RLS 활성화
-- ============================================================
ALTER TABLE public.ai_request_logs ENABLE ROW LEVEL SECURITY;

-- 4. 정책 정의
-- ============================================================
-- super_admin, operator 만 조회 가능 (백엔드 service_role은 RLS 우회하여 INSERT)
DROP POLICY IF EXISTS "admin_read_ai_logs" ON public.ai_request_logs;
CREATE POLICY "admin_read_ai_logs" ON public.ai_request_logs
    FOR SELECT USING (
        EXISTS (
            SELECT 1 FROM public.user_roles
            WHERE user_id = auth.uid()
              AND role IN ('super_admin', 'operator')
        )
    );

-- ============================================================
-- 참고:
--   INSERT는 백엔드 service_role 키로만 수행되므로 별도 INSERT 정책 불필요.
--   백엔드 .env에 SUPABASE_SERVICE_KEY (service_role) 설정 필요.
-- ============================================================